GlobalMejoras = {};
GlobalEstados = {};
GlobalDestinoAJAX = '#RAJAX';
RESPUESTA_CORRECTA = 'HECHO';
SERVFAULT = 747432;
FRONTENDFAULT = 323274;

function centrarElementoH(idElemento){
    var TamanoWidth = $(idElemento).parent().width();
    $(idElemento).css({'position' : 'absolute','left' : ((TamanoWidth - $(idElemento).width()) / 2).toString() + 'px'});
}
function centrarElementoV(idElemento){
    var TamanoHeight = $(idElemento).parent().height();
    $(idElemento).css({'position' : 'absolute','top' : ((TamanoHeight - $(idElemento).height()) / 2).toString() + 'px'});
}
function procesarFondos(){
    $('.fondo').each(function(){
        if($(this).attr('fondo') != 'undefined'){
            if($(this).find('.autoFondo').length == 0){
                $(this).append('<img class="autoFondo" src="' + $(this).attr('fondo') + '"/>');
                var Hijo = $(this).find('.autoFondo');
                $(Hijo).css({'position' : 'absolute','top' : '0px','left' : '0px','width' : $(this).width().toString() + 'px','height' : $(this).height().toString() + 'px'});
            }else{
                var Hijo = $(this).find('.autoFondo');
                $(Hijo).css({'position' : 'absolute','top' : '0px','left' : '0px','width' : $(this).width().toString() + 'px','height' : $(this).height().toString() + 'px'});
            }
        }
    });
}
function escaparCampo(Elemento,Tecla){
    if(Tecla < 36 || Tecla > 40) $(Elemento).val($(Elemento).val().replace(/\\/g,'').replace(/'/g,'').replace(/"/g,''));
}
function cargarSeccion(idContenedor,URL,funcionMostrado){
    $.get(URL,function(Datos){
	if(typeof(funcionMostrado) == "function") funcionMostrado();
       $(idContenedor).html(Datos); 
    }).error(function(){
       alert(L.errorAjax); 
    });
}
function hacerPOST(idFormulario,URL,funcionMostrado){
    $.post(URL,$(idFormulario).serialize(),function(Datos){
	if(typeof(funcionMostrado) == "function") funcionMostrado();
        $(GlobalDestinoAJAX).html(Datos);
    }).error(function(){
       alert(L.errorAjax); 
    });
}
function abrirDialog(idElemento, ancho, alto){
    var TamanoWidth = ($(window).width() /ancho);
    var TamanoHeight = ($(window).height() / alto);
    $(idElemento).find('.superwidth').each(function(){
	$(this).css('width',(TamanoWidth-(TamanoWidth / 15)));
    });
    $(idElemento).dialog({
	'width' : TamanoWidth,
	'height' : TamanoHeight,
       	'modal' : true
    });
}
// Comprueba si el formulario especificado está correcto, si los campos son numeros etc tec
function formularioCorrecto(idFormulario){
    var defaultMinimo = 0;
    var defaultMaximo = 100;
    var Valida = true;
    $(idFormulario).find('input').each(function(){
	if($(this).attr('type') == 'text'){
	    if(typeof($(this).attr('tipo')) != 'undefined'){
		switch($(this).attr('tipo')){
		    case 'entero':
			var Minimo = ((typeof($(this).attr('min')) == 'undefined') ? defaultMinimo : $(this).attr('min'));
			var Maximo = ((typeof($(this).attr('max')) == 'undefined') ? defaultMaximo : $(this).attr('max'));
			var Valor = parseInt($(this).val());
			if(isNaN(Valor)){
			    alert($(this).attr('name') + ' : ' + L.errorFormCorrectoSeEsperabaEntero);
			    Valida = false;
			    break;
			}
			if(Valor < Minimo || Valor > Maximo){
			    alert(L.errorFormCorrectoNumFueraDeRango + ' > ' + Minimo.toString() + ' & < ' + Maximo.toString());
			    Valida = false;
			    break;
			}
			break;
		    default:
			alert(L.errorFormCorrectoTipoInvalido);
			break; // Tradiciones
		}
	    }
	}
    });
    return Valida;
}
// Si la función está definida se ejecutará sobre el elemento al mostrarse, si la funcionOcultado está definida se ejecutará al ocultarse
function mostrarOcultarElemento(idElemento,funcionMostrado,funcionOcultado){
    if($(idElemento).css('display') == 'none'){
	if(typeof(funcionMostrado) == "function") funcionMostrado(idElemento);
	$(idElemento).fadeIn(1000);
    }else{
	if(typeof(funcionOcultado) == "function") funcionOcultado(idElemento);
	$(idElemento).fadeOut(1000);
    }
}
var GlobalRazas = {};
function cargarRazas(funcionCallback,Arg1){
    $.get('AJAX/razas.php?S=LR',function(Datos){
	GlobalRazas = undefined;
        GlobalRazas = $.parseJSON(Datos);
	if(typeof(funcionCallback) == "function") funcionCallback(Arg1);
    }).error(function(){
        alert(L.errorAjax);
    });
}
// Carga una plantilla, BoolAppend especifica si la acción debe ser html() o append()
function cargarPlantilla(URL,IdContenedor,BoolAppend,ObjetoDatos){
    $.get(URL,function(Datos){
	if(BoolAppend) $(IdContenedor).append((doT.template(Datos))(ObjetoDatos)); else $(IdContenedor).html((doT.template(Datos))(ObjetoDatos));
    }).error(function(){
	alert(L.errorAjax);
    });
}
// Interpreta el error recibido por el servidor (si fuera un error HECHO es que todo está bien), si la respuesta es HECHO la función FuncionSiBien(); se ejecutará
function procesarPeticion(CadenaEntrada,FuncionSiBien,Arg1,Arg2,Arg3){
    try{
	var RespuestaServidor = $.parseJSON(CadenaEntrada);
    }catch(e){
	return alert(L.errorEntendimiento);
    }
    switch(RespuestaServidor.NumError){
	case 'I1:':
	    return alert(LE.IMAGEN_NO_VALIDA_01 + '(' + RespuestaServidor.FormatosSoportados.join(',') + ') ' + LE.IMAGEN_NO_VALIDA_02 + RespuestaServidor.Mime);
	    break;
	case 'I2:':
	    return alert(LE.IMAGEN_MUY_GRANDE_01 + ' (' + RespuestaServidor.TamanoMaximo + ')' + LE.IMAGEN_MUY_GRANDE_02 + RespuestaServidor.Tamano);
	    break;
	case 'I3:':
	    return alert(LE.IMAGEN_MUY_ANCHA_O_ALTA_01 + ' (' + RespuestaServidor.AnchoMaximo + 'x' + RespuestaServidor.AltoMaximo + ' ' + LE.IMAGEN_MUY_ANCHA_O_ALTA_02 + RespuestaServidor.AnchoOriginal + 'x' + RespuestaServidor.AltoOriginal);
	    break;
	case 'N1':
	    return alert(LE.NOMBRE_MUY_CORTO(RespuestaServidor.Minimo,RespuestaServidor.TamanoNombre));
	    break;
	case 'N2':
	    return alert(LE.NOMBRE_MUY_LARGO(RespuestaServidor.Maximo,RespuestaServidor.TamanoNombre));
	    break;
	case 'D1':
	    return alert(LE.DESCRIPCION_MUY_CORTA(RespuestaServidor.Minimo,RespuestaServidor.TamanoDescripcion));
	    break;
	case 'D2':
	    return alert(LE.DESCRIPCION_MUY_LARGA(RespuestaServidor.Maximo,RespuestaServidor.TamanoDescripcion));
	    break;
	case RESPUESTA_CORRECTA:
	    return FuncionSiBien(Arg1,Arg2,Arg3);
	    break;
	case 1054: // Error en MySQL
	    return alert('Error SQL :' +  RespuestaServidor.Error);
	    break;
	case SERVFAULT: // Errores de configuración del servidor
	    return alert(LE.SERVFAULT + RespuestaServidor.Error);
	    break;
	case FRONTENDFAULT: // Errores de concordancia entre el frontend y el backend (i.e: Pedir borrar algo que no existe)
	    return alert(LE.FRONTENDFAULT + RespuestaServidor.Error);
	    break;
	default:
	    return alert(L.errorEntendimiento + CadenaEntrada);
	    break; // Buenas costumbres
    }
    if(typeof(console.log) != 'undefined') console.log(RespuestaServidor);
    return undefined;
}
function mostrarBytes(Numero,Precision){
    if(typeof(Precision) == 'undefined') Precision = 2;
    var Base = Math.log(Numero) / Math.log(1024);
    var Tipos = ['Bytes','KBytes','MBytes','GBytes','TBytes'];
    return (Math.pow(1024,Base - Math.floor(Base))).toFixed(Precision).toString() + Tipos[Math.floor(Base)]; 
}
// Disminutivo de if(typeof(console.log) != 'undefined') console.log(Mensaje);
function hacerLog(Mensaje){
    if(typeof(console.log) != 'undefined') console.log(Mensaje);
}
// A continuación comienzan los objetos
// Notificador muestra notificaciones que desapareceran rapidamente
function Notificador(ObjetoOpciones){
    hacerLog('Objeto Notificador creado');
    if(typeof(ObjetoOpciones) == 'undefined') ObjetoOpciones = {};
    this.Contenedor = (typeof(ObjetoOpciones.Contenedor) != 'undefined') ? ObjetoOpciones.Contenedor : '#Notificaciones';
    this.Ocupado = false;
    this.Mensaje = '';
    this.mostrarAviso = function(Mensaje,Lanzador){
	if(typeof(Lanzador) == 'undefined') Lanzador = this;
	hacerLog('Notificador: Petición de mostrar el aviso: ' + Mensaje);
	var YaEjecutando = $(Lanzador.Contenedor).attr('notificador') == 'Ejecutandose';
	if(YaEjecutando || Lanzador.Ocupado){
	    hacerLog('Notificador: Petición de mostrar el aviso: ' + Mensaje + ' en espera');
	    setTimeout(Lanzador.mostrarAviso,1000,Mensaje,Lanzador);
	}else{
	    $(Lanzador.Contenedor).attr('notificador','Ejecutandose');
	    Lanzador.Ocupado = true;
	    $(Lanzador.Contenedor).html(Mensaje);
	    Lanzador.Mensaje = Mensaje;
	    setTimeout(Lanzador.internalMostrar,500,Lanzador);
	}
    }
    this.internalMostrar = function(ObjetoPadre){
	hacerLog('Notificador: Mostrando: ' + ObjetoPadre.Mensaje);
	$(ObjetoPadre.Contenedor).fadeIn(3000);
	setTimeout(ObjetoPadre.internalOcultar,3000,ObjetoPadre);
    }
    this.internalOcultar = function(ObjetoPadre){
	hacerLog('Notificador: Ocultando: ' + ObjetoPadre.Mensaje);
	$(ObjetoPadre.Contenedor).fadeOut(3000);
	setTimeout(ObjetoPadre.internalLimpiar,3000,ObjetoPadre);
    }
    this.internalLimpiar = function(ObjetoPadre){
	hacerLog('Notificador: Limpiando: ' + ObjetoPadre.Mensaje);
	$(ObjetoPadre.Contenedor).attr('notificador','Disponible');
	ObjetoPadre.Ocupado = false;
	ObjetoPadre.Mensaje = '';
    }
}